﻿using System;
using System.Windows.Forms;
using SoftwareConsulting.BI11.Studio.InternalServices;
using SoftwareConsulting.BI11.Studio.UI.ProjectExplorer;
using SoftwareConsulting.BI11.Studio.UI.ProjectExplorer.SituationsHierarchy;
using SoftwareConsulting.BI11.Studio.UI.Properties;

namespace SoftwareConsulting.BI11.Studio.UI
{
    /// <summary>
    /// Класс формы "Оформление"
    /// </summary>
    public partial class PreferencesDialog : Form
    {
        #region внутренние переменные
        private ProjectExplorerForm _projectExplorerLink; //ссылка на форму обозревателя проекта
        private ColorScheme _beforeScheme; //предыдущая схема
        private PanelsStyle _beforeStyle; //предыдущее оформление панелей
        private bool _initialized; //флаг проинициализированного диалога
        #endregion

        #region внутренние методы
        /// <summary>
        /// Применение изменений и закрытие диалога
        /// </summary>
        private void ApplyAndClose()
        {
            DialogResult = DialogResult.OK;
            Close();
        }

        /// <summary>
        /// Отмена изменений и закрытие диалога
        /// </summary>
        private void CancelAndClose()
        {
            _projectExplorerLink.Scheme = _beforeScheme;
            _projectExplorerLink.Style = _beforeStyle;
            DialogResult = DialogResult.Cancel;
            Close();
        }

        /// <summary>
        /// Предпросмотр
        /// </summary>
        private void Apply()
        {
            switch (SchemeComboBox.SelectedIndex)
            {
                case 0:
                    _projectExplorerLink.Scheme = ColorScheme.System;
                    break;
                case 1:
                    _projectExplorerLink.Scheme = ColorScheme.Red;
                    break;
            }
            if (_initialized)
            {
                switch (StyleBox.SelectedIndex)
                {
                    case 0:
                        _projectExplorerLink.Style = PanelsStyle.Caramel;
                        break;
                    case 1:
                        _projectExplorerLink.Style = PanelsStyle.MoneyTwins;
                        break;
                    case 2:
                        _projectExplorerLink.Style = PanelsStyle.Lilian;
                        break;
                    case 3:
                        _projectExplorerLink.Style = PanelsStyle.TheAsphaltWorld;
                        break;
                    case 4:
                        _projectExplorerLink.Style = PanelsStyle.IMaginary;
                        break;
                    case 5:
                        _projectExplorerLink.Style = PanelsStyle.Black;
                        break;
                    case 6:
                        _projectExplorerLink.Style = PanelsStyle.Blue;
                        break;
                }
            }
        }

        /// <summary>
        /// Инициализирует диалог
        /// </summary>
        private void Initialize()
        {            
            _beforeScheme = _projectExplorerLink.Scheme;
            _beforeStyle = _projectExplorerLink.Style;
            ComboBox.ObjectCollection items = SchemeComboBox.Items;
            items.Clear();
            items.Add(Resources.BI_SITUATIONSHIERARCHY_SCHEME_SYSTEM);
            items.Add(Resources.BI_SITUATIONSHIERARCHY_SCHEME_RED);
            int index = (int)(_projectExplorerLink.Scheme) - 1;            
            SchemeComboBox.SelectedIndex = index;
            items = StyleBox.Items;
            items.Clear();
            items.Add(Resources.BI_STYLE_CARAMEL);
            items.Add(Resources.BI_STYLE_MONEYTWINS);
            items.Add(Resources.BI_STYLE_LILIAN);
            items.Add(Resources.BI_STYLE_THEASPHALTWORLD);
            items.Add(Resources.BI_STYLE_IMAGINARY);
            items.Add(Resources.BI_STYLE_BLACK);
            items.Add(Resources.BI_STYLE_BLUE);
            index = (int)_projectExplorerLink.Style - 1;
            StyleBox.SelectedIndex = index;    
        }

        #region обработчики
        /// <summary>
        /// Обработчик нажатия на кнопку ОК
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OKButton_Click(object sender, EventArgs e)
        {
            ApplyAndClose();
        }

        /// <summary>
        /// Обработчик смены значения в комбобоксе цвета ситуаций
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void SchemeComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Apply();
        }

        /// <summary>
        /// Обработчик смены значения в комбобоксе оформления панелей
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void StyleBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            Apply();
        }

        /// <summary>
        /// Обработчик нажатия на кнопку Отмена
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PreferencesCancelButton_Click(object sender, EventArgs e)
        {
            CancelAndClose();
        }

        private void PreferencesDialog_Shown(object sender, EventArgs e)
        {
            _initialized = false;
            Initialize();
            _initialized = true;
        }
        #endregion
        #endregion

        #region конструкторы и финализаторы
        /// <summary>
        /// Инициализация компонентов
        /// </summary>
        public PreferencesDialog(ProjectExplorerForm projectExplorerLink)
        {
            _projectExplorerLink = projectExplorerLink;
            InitializeComponent();            
        }
        #endregion                        
    }
}
